﻿using UnityEngine;
using System.Collections;

public class PickupSpawner : MonoBehaviour
{
    public GameObject[] pickups;                // 拾取物预制体数组（炸弹拾取物在第一个，生命值拾取物在第二个）
    public float pickupDeliveryTime = 5f;      // 生成延迟时间
    public float leftPosX;                 // 生成位置的最小X坐标（世界坐标系）
    public float rightPosX;                // 生成位置的最大X坐标（世界坐标系）
    public float highHealthThreshold = 75f;     // 玩家生命值高于此值时，仅生成炸弹箱子
    public float lowHealthThreshold = 25f;      // 玩家生命值低于此值时，仅生成生命值箱子

    private PlayerHealth playerHealth;          // 引用玩家生命值脚本

    void Awake()
    {
        // 设置引用
        playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>();
    }

    void Start()
    {
        // 开始第一次生成
        StartCoroutine(DeliverPickup());//StartCoroutine → "启动协程"
    }

    public IEnumerator DeliverPickup()//协程，协程返回值IEnumerator
    {
        yield return new WaitForSeconds(pickupDeliveryTime);//暂停一会 等待生成延迟
                                                            //yield return → 协程的关键字，表示“暂停并等待”。
                                                            //WaitForSeconds → Unity 提供的计时方法，用于延迟执行。
        float dropPosX = Random.Range(leftPosX, rightPosX); // 在生成范围内随机一个X坐标
        Vector3 dropPos = new Vector3(dropPosX, 15f, 0f); // 创建位置

        // 如果玩家生命值高于高阈值...
        if (playerHealth.health >= highHealthThreshold)
            // ...在生成位置实例化炸弹拾取物
            Instantiate(pickups[0], dropPos, Quaternion.identity);//Quaternion.identity不旋转
        // 如果玩家生命值低于低阈值...
        else if (playerHealth.health <= lowHealthThreshold)
            // ...在生成位置实例化生命值拾取物
            Instantiate(pickups[1], dropPos, Quaternion.identity);
        // 其他情况...
        else
        {
            int pickupIndex = Random.Range(0, pickups.Length);
            Instantiate(pickups[pickupIndex], dropPos, Quaternion.identity);
        }
    }
}